"""
Password handling following SOLID principles.
"""

from passlib.context import CryptContext


class PasswordHandler:
    """Password hashing and verification handler."""
    
    def __init__(self):
        self.pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
    
    def hash_password(self, password: str) -> str:
        """Hash a password."""
        return self.pwd_context.hash(password)
    
    def verify_password(self, plain_password: str, hashed_password: str) -> bool:
        """Verify a password against its hash."""
        return self.pwd_context.verify(plain_password, hashed_password)
    
    def needs_update(self, hashed_password: str) -> bool:
        """Check if password hash needs update."""
        return self.pwd_context.needs_update(hashed_password)


# Global password handler instance
password_handler = PasswordHandler()